//package com.sky.controller.admin;
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.SignatureAlgorithm;
//import io.jsonwebtoken.ExpiredJwtException;
//import io.jsonwebtoken.MalformedJwtException;
//import io.jsonwebtoken.SignatureException;
//import io.jsonwebtoken.UnsupportedJwtException;
//import java.util.Calendar;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//
//public class JWTExample {
//
//    // 用于签名的密钥（实际应用中应从安全位置获取）
//    private static final String SECRET_KEY = "your-256-bit-secret-key-here";
//
//    public static void main(String[] args) {
//        // 1. 创建用户信息
//        Map<String, Object> userInfo = new HashMap<>();
//        userInfo.put("userId", 123);
//        userInfo.put("username", "user123");
//        userInfo.put("role", "admin");
//
//        // 2. 生成 JWT
//        String token = generateJWT(userInfo);
//        System.out.println("生成的 JWT: "+"\n" + token);
//
//        // 3. 验证并解析 JWT
//        try {
//            Claims claims = verifyAndParseJWT(token);
//            System.out.println("JWT 验证成功!");
//
//            // 4. 提取 JWT 中的信息
//            System.out.println("JWT 中的信息:");
//            System.out.println("用户ID: " + claims.get("userId"));
//            System.out.println("用户名: " + claims.get("username"));
//            System.out.println("角色: " + claims.get("role"));
//            System.out.println("过期时间: " + claims.getExpiration());
//        } catch (Exception e) {
//            System.out.println("JWT 验证失败: " + e.getMessage());
//        }
//    }
//
//    /**
//     * 生成 JWT
//     * @param claims 用户信息
//     * @return JWT 字符串
//     */
//    public static String generateJWT(Map<String, Object> claims) {
//        // 设置 JWT 过期时间（7天后）
//        Calendar calendar = Calendar.getInstance();
//        calendar.add(Calendar.DATE, 7);
////
////创建 Claims 对象
////        Claims claims = Jwts.claims();
////        claims.put("userId", 123);
////        claims.put("username", "john_doe");
////        claims.put("role", "admin");
////
////设置标准声明（可选）
////        claims.setSubject("user123"); // 主题
////        claims.setIssuedAt(new Date()); // 签发时间
////        claims.setExpiration(new Date(System.currentTimeMillis() + 3600000)); // 过期时间
//        return Jwts.builder()
//                .setClaims(claims)                  // 设置自定义声明
//                .setExpiration(calendar.getTime())  // 设置过期时间
//                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)  // 签名
//                .compact();  // 生成 JWT 字符串
//    }
//
//    /**
//     * 验证并解析 JWT
//     * @param token JWT 字符串
//     * @return 解析后的 Claims 对象
//     * @throws Exception 验证失败时抛出异常
//     */
//    public static Claims verifyAndParseJWT(String token) throws Exception {
//        try {
//            return Jwts.parser()
//                    .setSigningKey(SECRET_KEY)  // 设置签名密钥
//                    .parseClaimsJws(token)  // 解析 JWT
//                    .getBody();  // 获取 Claims
//        } catch (ExpiredJwtException e) {
//            throw new Exception("JWT 已过期", e);
//        } catch (UnsupportedJwtException e) {
//            throw new Exception("不支持的 JWT 格式", e);
//        } catch (MalformedJwtException e) {
//            throw new Exception("JWT 格式错误", e);
//        } catch (SignatureException e) {
//            throw new Exception("JWT 签名无效", e);
//        } catch (IllegalArgumentException e) {
//            throw new Exception("JWT 为空或格式错误", e);
//        }
//    }
//}